SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[pje_porOtrasAcciones] @idInscripcion as integer ,@pje as float output,@resultado as int  AS
set nocount on 

declare  @idAgente as int,@idCargoGenerico as int,@idAsignaturaGenerica as int, @idTipoConvocatoria as int ,@idlocalidad as int
declare @incumbe as integer --0=si 1=no incumbe
declare @FechaLimite as datetime
declare @Aprobado as varchar(1),@CursoOCap as  int,@horas int,@ValeComoCurso varchar(1) ,@Cargogen as int,@AsigGen as int,@tipoDeEntidad as int,@IdCapAg as int
declare @pjeAuxiliar  as float , @pjeOficiales as float,@pjePrivados as float, @topeCursosOficiales as float,@topeCursosPrivados as float
declare @idCapAg_anterior as int
declare @nivel_insc as int,@ciclo as int,@grupoincumbencia as int,@grupoincumbencia2 as int
DECLARE @Error INT

BEGIN TRANSACTION
SET @ERROR=0

select @topeCursosOficiales= (select valor1 from tb_parametros where idparametro=43)
select @topeCursosPrivados= (select valor1 from tb_parametros where idparametro=44)

select  @idAgente=i.Agente,@IdcargoGenerico = i.CargoGenerico,@AsigGen=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,@nivel_insc = i.nivel,@ciclo=ciclo
	from 
	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion

set @idCapAg_anterior = -1
--Corrección para 3er ciclo
if @nivel_insc = 3 and @ciclo = 2 set  @nivel_insc=4

select @grupoIncumbencia=case
	when @nivel_insc = 2 then 572
	when @nivel_insc = 3 then 573
	when @nivel_insc = 4 then 571
end

select @grupoIncumbencia2=case
	when @nivel_insc = 2 then 570
	when @nivel_insc = 3 then 570
	when @nivel_insc = 4 then 571
end

if  @idTipoConvocatoria  in (1,2,3,4,5,9)  -- TipoConvocatoria = 12  ingreso,interinatos y suplencias
	begin

	declare c cursor FORWARD_ONLY FOR
		select distinct CapAg.Aprobado,Cap.CursoOCapacitacion,Cap.horasCatedra,Cap.ValeComoCurso,h.Cargogenerico,h.AsignaturaGenerica,CapAg.TipoEntidad,CapAg.idCapacitacion
		from
		tb_capacitacionesDelAgente CapAg
		join tb_capacitaciones Cap on CapAg.Capacitacion=Cap.idCapacitacion
		join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=Cap.GrupoIncumbencias
--		join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
		join tb_incumbencias h on G.idGrupoincumbencia=h.grupoIncumbencia
--		join tb_entidadesCapacitadoras Ent on Cap.entidad=Ent.idEntidad
--		join tb_tipoEntidadCapacitadora T on Ent.tipoEntidad=T.id								--supongo que si Cap.CursoOCapacitacion = 1 se trata de una Capacitacion, si Cap.CursoOCapacitacion = 2 esCurso Dictado y si Cap.CursoOCapacitacion = 3 se trata de un curso realizado 						
		where agente=@idAgente and h.CargoGenerico=@idCargogenerico 
		and h.AsignaturaGenerica=@AsigGen and Cap.CursoOCapacitacion = 4 and CapAg.FechaPresentacion <= @FechaLimite --and (g.idgrupoincumbencia=@grupoIncumbencia or g.idgrupoincumbencia=@grupoIncumbencia2)-- and Cap.horasCatedra >19 no requieren más el mínimo de 20 horas ----------------------si Cap.CursoOCapacitacion = 4 se trata de un Otas Acciones de perfeccionamiento
		order by CapAg.idCapacitacion
		
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

	open c
	fetch next from c into @Aprobado,@CursoOCap,@horas ,@ValeComoCurso ,@Cargogen ,@AsigGen ,@tipoDeEntidad,@IdCapAg 

	set @pjeAuxiliar=0
	set @pjeOficiales = 0
	set @pjePrivados=0

	while @@FETCH_STATUS = 0
	begin
		if @IdCapAg <> @idCapAg_anterior --agregué esta condición por que algunos cusros se seleccionan 2 veces
		begin
			set @idCapAg_anterior = @IdCapAg
			--print 'Otras acciones oficial ................' + cast(@idCapAg as varchar)
			select @pjeAuxiliar=
			case
				when @horas BETWEEN 300 AND 420 then 3
				when @horas > 420 then  5
				when @horas BETWEEN 80 AND 300  then round(1.5+(@horas-80)*.0068182,3)
				when @horas< 80 then round( 0.5+(@horas-10)*.0142859	,3)
				else 0
			end

			if @aprobado <> 'S'  set @pjeAuxiliar=@pjeAuxiliar*0.1
			if @tipoDeEntidad in (2)  
			begin
				--print 'Otras Acciones  privado' + cast(@idCapAg as varchar)
				set @pjeprivados=round(@pjeprivados+@pjeAuxiliar,3)
				if @pjeprivados > @TopeCursosPrivados set @pjePrivados=@TopeCursosPrivados
			end
			else
			     begin	
				set @pjeOficiales=round(@pjeOficiales+@pjeAuxiliar,3)
				if @pjeOficiales > @TopeCursosOficiales set @pjeOficiales=@TopeCursosOficiales
			    end
	print @pjeAuxiliar	

	end --si capacitacion es distinta de capacitacion anterior
	fetch next from c into @Aprobado,@CursoOCap,@horas ,@ValeComoCurso ,@Cargogen ,@AsigGen ,@tipoDeEntidad,@IdCapAg
	end
	set @pje =@pjeOficiales+@pjePrivados	
	close c
	deallocate c

	set @resultado = 0

	end

	--print 'Otras acciones oficiales' + cast(@pjeOficiales as varchar)
	--print @pjeOficiales
	--print 'Otras acciones privados' + cast (@pjePrivados as varchar)
	--print @pjePrivados
	--print @pje

Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[pje_porOtrasAcciones] TO [Juntas]
GO
